`timescale 1ns/1ps

module key_filter_tb();

	reg clk;
	reg rst_n;
	reg key;
	wire key_p_flag;
	wire key_r_flag;
	wire key_state;

key_filter key_filter_inst(
	.clk(clk),
	.rst_n(rst_n),
	.key(key),
	.key_p_flag(key_p_flag),
	.key_r_flag(key_r_flag),
	.key_state(key_state)
);

	initial clk = 1;
	always #10 clk = ~clk;
	
	initial begin
		rst_n = 0;
		key = 1;
		#201;
		rst_n = 1;
		// 按下测试
		// 空闲稳定
		key = 1;#100_000_000;// 空闲100ms
		
		// 按下抖动
		key = 0;#18_000_000;// 按下 抖动 低18ms
		key = 1;#2_000_000;// 按下 抖动 高2ms
		key = 0;#1_000_000;// 按下 抖动 低1ms
		key = 1;#200_000;// 按下抖动0.2ms
		key = 0;#20_000_000;// 按下 稳定 低20ms
		
		// 按下稳定
		key = 0;#50_000_000;// 按下 稳定 继续50ms
		
		// 释放抖动
		key = 1;#2_000_000;// 释放 抖动 高2ms
		key = 0;#1_000_000;// 释放 抖动 低1ms
		key = 1;#20_000_000;// 释放 稳定 高20ms
		
		$stop;
	end

endmodule
